1. Technical Field
The present invention relates generally to the use of file systems. More specifically, the present invention relates to use of file systems in an embedded computer that can execute binary files in the same memory location in which they are stored by the file system.
2. Background of the Invention
Embedded computers are being used in an ever increasing number and variety of devices. Vehicles, industrial equipment, consumer electronics, and other devices are becoming increasingly dependent upon the use of embedded computers and the software applications (“computer programs”) run on those embedded computers. Unlike “general purpose computers” such as laptops, desktop PCs, work stations, and mainframe computers, embedded computers are limited purpose computers that serve specific purposes with regard to the device incorporating the embedded computer. For example, embedded computers are used in a variety of subsystems in an automobile, such as anti-lock brakes, airbag controllers, global positioning applications, and fuel transmission systems. The programming languages used to program general purpose computers are increasingly being used to program embedded computers for specialized devices. Just as general purpose computers have file systems that store software components such as binary executable files, other data files, and even shared libraries of files, embedded computers also have file systems that store a wide range of different software components.
Embedded computers are typically more sensitive to memory constraints than general purpose computers. At the same time, performance requirements for an embedded computer can be less forgiving than for a general purpose computer because the performance problems in an embedded computer will often have an immediate impact in the physical non-virtual world. For example, safety devices in a vehicle need to operate at levels that far exceed a word processing program in a general purpose computer. Embedded computers require sufficient memory to generate reliable processing results in a real-time manner. Moreover, embedded computers cannot take advantage of the flexibility that is available to general purpose computers. For example, general purpose computers can alter which computer programs are running at a particular time. Office support software on a general purpose computer can be shut down when a graphics-intensive computer game is to be played. End-users of embedded computers generally do not have the same flexibility to load or unload software. Moreover, memory capabilities in a general purpose computer can benefit each of the applications that can potentially be housed on that general purpose computer. The cost of additional memory can thus be divided up amongst all of the applications on the computer. In contrast, memory capabilities in an embedded computer cannot easily be utilized by other embedded computers. A device can incorporate many different embedded computers and yet be unable to exchange memory between them, with no embedded computer able to access any excess memory in any other embedded computer. All of these factors can make embedded computers more sensitive to memory constraints.
Accentuating memory constraints in both general purpose computers and embedded computers is the increasing reliance on reusable libraries housing shared software components. The dependencies of such libraries are typically resolved at runtime, requiring an extra copy of the software components to be placed into memory. Extra copies of other software components including executable binary files and non-executable files are also made. Such memory consumption makes the embedded computer, and devices incorporating the embedded computer, more expensive. Unlike situations involving general purpose computers, the user of an embedded computer cannot take action to alleviate memory consumption. It would be desirable if memory in an embedded computer could be conserved by avoiding the creation of extra-copies of software components in the execution of computer programs. Prior art central processing units (CPUs) require data to be in contiguous memory. It would be desirable if a file system could be structured such that software components can be executed by the CPU where the software components are stored.